<!--
  * 安全事件基础信息表
  *
  * @Author:    chenyuqiang
  * @Date:      2025-08-24 20:37:14
  * @Copyright  1.0
-->
<template>
  <a-modal
      :title="form.id ? '编辑' : '添加'"
      :width="100"
      :open="visibleFlag"
      @cancel="onClose"
      :maskClosable="false"
      :destroyOnClose="true"
  >
    <a-form ref="formRef" :model="form" :rules="rules" :label-col="{ span: 5 }" >
        <a-form-item label="事件类型，如：firewall_alert、ids_alert、edr_alert等"  name="eventType">
          <a-input style="width: 100%" v-model:value="form.eventType" placeholder="事件类型，如：firewall_alert、ids_alert、edr_alert等" />
        </a-form-item>
        <a-form-item label="事件名称，描述事件的具体内容"  name="eventName">
          <a-input style="width: 100%" v-model:value="form.eventName" placeholder="事件名称，描述事件的具体内容" />
        </a-form-item>
        <a-form-item label="触发事件的规则名称或ID"  name="eventRule">
          <a-input style="width: 100%" v-model:value="form.eventRule" placeholder="触发事件的规则名称或ID" />
        </a-form-item>
        <a-form-item label="事件发生时间，格式：yyyy-MM-ddTHH:mm:ss.SSSZ"  name="eventTime">
          <a-input style="width: 100%" v-model:value="form.eventTime" placeholder="事件发生时间，格式：yyyy-MM-ddTHH:mm:ss.SSSZ" />
        </a-form-item>
        <a-form-item label="事件危险等级：1-低危，2-中危，3-高危，4-严重，5-紧急"  name="severity">
          <a-input-number style="width: 100%" v-model:value="form.severity" placeholder="事件危险等级：1-低危，2-中危，3-高危，4-严重，5-紧急" />
        </a-form-item>
        <a-form-item label="事件名称标识，用于分类管理"  name="name">
          <a-input-number style="width: 100%" v-model:value="form.name" placeholder="事件名称标识，用于分类管理" />
        </a-form-item>
        <a-form-item label="设备名称标识"  name="deviceName">
          <a-input-number style="width: 100%" v-model:value="form.deviceName" placeholder="设备名称标识" />
        </a-form-item>
        <a-form-item label="设备IP地址标识"  name="deviceIp">
          <a-input-number style="width: 100%" v-model:value="form.deviceIp" placeholder="设备IP地址标识" />
        </a-form-item>
        <a-form-item label="攻击数据包数量"  name="attackPackets">
          <a-input-number style="width: 100%" v-model:value="form.attackPackets" placeholder="攻击数据包数量" />
        </a-form-item>
        <a-form-item label="目标资产名称标识"  name="dstassetname">
          <a-input-number style="width: 100%" v-model:value="form.dstassetname" placeholder="目标资产名称标识" />
        </a-form-item>
        <a-form-item label="源资产名称标识"  name="srcassetname">
          <a-input-number style="width: 100%" v-model:value="form.srcassetname" placeholder="源资产名称标识" />
        </a-form-item>
        <a-form-item label="安全域标识"  name="securityDomains">
          <a-input-number style="width: 100%" v-model:value="form.securityDomains" placeholder="安全域标识" />
        </a-form-item>
        <a-form-item label="源IP地址，支持IPv4和IPv6"  name="srcIp">
          <a-input style="width: 100%" v-model:value="form.srcIp" placeholder="源IP地址，支持IPv4和IPv6" />
        </a-form-item>
        <a-form-item label="源端点类型：0-内网，1-外网，2-DMZ等"  name="srcType">
          <a-input style="width: 100%" v-model:value="form.srcType" placeholder="源端点类型：0-内网，1-外网，2-DMZ等" />
        </a-form-item>
        <a-form-item label="源端口号"  name="srcPort">
          <a-input-number style="width: 100%" v-model:value="form.srcPort" placeholder="源端口号" />
        </a-form-item>
        <a-form-item label="源主机名"  name="srcHostname">
          <a-input style="width: 100%" v-model:value="form.srcHostname" placeholder="源主机名" />
        </a-form-item>
        <a-form-item label="源MAC地址，格式：XX:XX:XX:XX:XX:XX"  name="srcMac">
          <a-input style="width: 100%" v-model:value="form.srcMac" placeholder="源MAC地址，格式：XX:XX:XX:XX:XX:XX" />
        </a-form-item>
        <a-form-item label="目标IP地址，支持IPv4和IPv6"  name="dstIp">
          <a-input style="width: 100%" v-model:value="form.dstIp" placeholder="目标IP地址，支持IPv4和IPv6" />
        </a-form-item>
        <a-form-item label="目标端点类型：0-内网，1-外网，2-DMZ等"  name="dstType">
          <a-input style="width: 100%" v-model:value="form.dstType" placeholder="目标端点类型：0-内网，1-外网，2-DMZ等" />
        </a-form-item>
        <a-form-item label="目标端口号"  name="dstPort">
          <a-input-number style="width: 100%" v-model:value="form.dstPort" placeholder="目标端口号" />
        </a-form-item>
        <a-form-item label="目标主机名"  name="dstHostname">
          <a-input style="width: 100%" v-model:value="form.dstHostname" placeholder="目标主机名" />
        </a-form-item>
        <a-form-item label="用户名，触发事件的用户账户"  name="userName">
          <a-input style="width: 100%" v-model:value="form.userName" placeholder="用户名，触发事件的用户账户" />
        </a-form-item>
        <a-form-item label="HTTP请求方法：GET、POST、PUT、DELETE等"  name="reqMethod">
          <a-input style="width: 100%" v-model:value="form.reqMethod" placeholder="HTTP请求方法：GET、POST、PUT、DELETE等" />
        </a-form-item>
        <a-form-item label="请求URL地址"  name="reqUrl">
          <a-textarea style="width: 100%" v-model:value="form.reqUrl" placeholder="请求URL地址" />
        </a-form-item>
        <a-form-item label="请求来源页面"  name="reqReferer">
          <a-textarea style="width: 100%" v-model:value="form.reqReferer" placeholder="请求来源页面" />
        </a-form-item>
        <a-form-item label="请求体内容"  name="reqBody">
          <a-textarea style="width: 100%" v-model:value="form.reqBody" placeholder="请求体内容" />
        </a-form-item>
        <a-form-item label="HTTP响应状态码"  name="reqStatus">
          <a-input-number style="width: 100%" v-model:value="form.reqStatus" placeholder="HTTP响应状态码" />
        </a-form-item>
        <a-form-item label="用户代理字符串"  name="reqUserAgent">
          <a-textarea style="width: 100%" v-model:value="form.reqUserAgent" placeholder="用户代理字符串" />
        </a-form-item>
        <a-form-item label="请求主机名"  name="reqHost">
          <a-input style="width: 100%" v-model:value="form.reqHost" placeholder="请求主机名" />
        </a-form-item>
        <a-form-item label="日志类型：web、network、system等"  name="logType">
          <a-input style="width: 100%" v-model:value="form.logType" placeholder="日志类型：web、network、system等" />
        </a-form-item>
        <a-form-item label="请求头信息，JSON格式"  name="reqHeader">
          <a-textarea style="width: 100%" v-model:value="form.reqHeader" placeholder="请求头信息，JSON格式" />
        </a-form-item>
        <a-form-item label="X-Forwarded-For头信息"  name="reqxff">
          <a-input style="width: 100%" v-model:value="form.reqxff" placeholder="X-Forwarded-For头信息" />
        </a-form-item>
        <a-form-item label="请求Cookie信息"  name="reqCookie">
          <a-textarea style="width: 100%" v-model:value="form.reqCookie" placeholder="请求Cookie信息" />
        </a-form-item>
        <a-form-item label="WAF唯一标识符"  name="reqXwafuuid">
          <a-input style="width: 100%" v-model:value="form.reqXwafuuid" placeholder="WAF唯一标识符" />
        </a-form-item>
        <a-form-item label="响应重定向地址"  name="rspLocation">
          <a-input style="width: 100%" v-model:value="form.rspLocation" placeholder="响应重定向地址" />
        </a-form-item>
        <a-form-item label="响应状态码字符串"  name="rspCode">
          <a-input style="width: 100%" v-model:value="form.rspCode" placeholder="响应状态码字符串" />
        </a-form-item>
        <a-form-item label="响应体内容"  name="rspBody">
          <a-textarea style="width: 100%" v-model:value="form.rspBody" placeholder="响应体内容" />
        </a-form-item>
        <a-form-item label="威胁分类：malware、sql_injection、xss等"  name="threatCategory">
          <a-input style="width: 100%" v-model:value="form.threatCategory" placeholder="威胁分类：malware、sql_injection、xss等" />
        </a-form-item>
        <a-form-item label="威胁特征签名"  name="threatSignature">
          <a-input style="width: 100%" v-model:value="form.threatSignature" placeholder="威胁特征签名" />
        </a-form-item>
        <a-form-item label="地理位置国家代码，如：CN、US等"  name="geoCountry">
          <a-input style="width: 100%" v-model:value="form.geoCountry" placeholder="地理位置国家代码，如：CN、US等" />
        </a-form-item>
        <a-form-item label="源地理位置纬度"  name="srcgeolat">
          <a-input style="width: 100%" v-model:value="form.srcgeolat" placeholder="源地理位置纬度" />
        </a-form-item>
        <a-form-item label="源地理位置经度"  name="srcgeolon">
          <a-input style="width: 100%" v-model:value="form.srcgeolon" placeholder="源地理位置经度" />
        </a-form-item>
        <a-form-item label="源地理位置城市"  name="srcgeocity">
          <a-input style="width: 100%" v-model:value="form.srcgeocity" placeholder="源地理位置城市" />
        </a-form-item>
        <a-form-item label="目标地理位置国家代码"  name="dstgeocountry">
          <a-input style="width: 100%" v-model:value="form.dstgeocountry" placeholder="目标地理位置国家代码" />
        </a-form-item>
        <a-form-item label="目标地理位置纬度"  name="dstgeolat">
          <a-input style="width: 100%" v-model:value="form.dstgeolat" placeholder="目标地理位置纬度" />
        </a-form-item>
        <a-form-item label="目标地理位置经度"  name="dstgeolon">
          <a-input style="width: 100%" v-model:value="form.dstgeolon" placeholder="目标地理位置经度" />
        </a-form-item>
        <a-form-item label="目标地理位置城市"  name="dstgeocity">
          <a-input style="width: 100%" v-model:value="form.dstgeocity" placeholder="目标地理位置城市" />
        </a-form-item>
        <a-form-item label="网络协议：HTTP、HTTPS、TCP、UDP等"  name="protocol">
          <a-input style="width: 100%" v-model:value="form.protocol" placeholder="网络协议：HTTP、HTTPS、TCP、UDP等" />
        </a-form-item>
        <a-form-item label="原始日志数据，完整的原始事件信息"  name="rawLog">
          <a-textarea style="width: 100%" v-model:value="form.rawLog" placeholder="原始日志数据，完整的原始事件信息" />
        </a-form-item>
        <a-form-item label="是否被阻止：0-否，1-是"  name="blocked">
          <a-input style="width: 100%" v-model:value="form.blocked" placeholder="是否被阻止：0-否，1-是" />
        </a-form-item>
        <a-form-item label="采取的行动：none、block、alert、log等"  name="action">
          <a-input style="width: 100%" v-model:value="form.action" placeholder="采取的行动：none、block、alert、log等" />
        </a-form-item>
        <a-form-item label="设备操作系统：Windows、Linux、macOS等"  name="deviceos">
          <a-input style="width: 100%" v-model:value="form.deviceos" placeholder="设备操作系统：Windows、Linux、macOS等" />
        </a-form-item>
        <a-form-item label="连接类型：direct、proxy、vpn等"  name="lianjie">
          <a-input style="width: 100%" v-model:value="form.lianjie" placeholder="连接类型：direct、proxy、vpn等" />
        </a-form-item>
        <a-form-item label="响应开始时间"  name="rspStartTime">
          <a-input style="width: 100%" v-model:value="form.rspStartTime" placeholder="响应开始时间" />
        </a-form-item>
        <a-form-item label="响应结束时间"  name="rspEndTime">
          <a-input style="width: 100%" v-model:value="form.rspEndTime" placeholder="响应结束时间" />
        </a-form-item>
        <a-form-item label="查询参数字符串"  name="queryString">
          <a-textarea style="width: 100%" v-model:value="form.queryString" placeholder="查询参数字符串" />
        </a-form-item>
        <a-form-item label="攻击载荷内容"  name="payload">
          <a-textarea style="width: 100%" v-model:value="form.payload" placeholder="攻击载荷内容" />
        </a-form-item>
        <a-form-item label="响应头信息，JSON格式"  name="rspHeader">
          <a-textarea style="width: 100%" v-model:value="form.rspHeader" placeholder="响应头信息，JSON格式" />
        </a-form-item>
        <a-form-item label="请求开始时间"  name="reqStartTime">
          <a-input style="width: 100%" v-model:value="form.reqStartTime" placeholder="请求开始时间" />
        </a-form-item>
        <a-form-item label="请求结束时间"  name="reqEndTime">
          <a-input style="width: 100%" v-model:value="form.reqEndTime" placeholder="请求结束时间" />
        </a-form-item>
        <a-form-item label="白名单规则效果"  name="whiteRuleEffect">
          <a-input style="width: 100%" v-model:value="form.whiteRuleEffect" placeholder="白名单规则效果" />
        </a-form-item>
        <a-form-item label="记录名称"  name="recname">
          <a-input style="width: 100%" v-model:value="form.recname" placeholder="记录名称" />
        </a-form-item>
        <a-form-item label="任务名称"  name="taskname">
          <a-input style="width: 100%" v-model:value="form.taskname" placeholder="任务名称" />
        </a-form-item>
        <a-form-item label="文件MD5哈希值"  name="md5">
          <a-input style="width: 100%" v-model:value="form.md5" placeholder="文件MD5哈希值" />
        </a-form-item>
        <a-form-item label="进程名称"  name="procname">
          <a-input style="width: 100%" v-model:value="form.procname" placeholder="进程名称" />
        </a-form-item>
        <a-form-item label="命令行参数"  name="cmdline">
          <a-textarea style="width: 100%" v-model:value="form.cmdline" placeholder="命令行参数" />
        </a-form-item>
        <a-form-item label="父进程命令行参数"  name="pCmdline">
          <a-textarea style="width: 100%" v-model:value="form.pCmdline" placeholder="父进程命令行参数" />
        </a-form-item>
        <a-form-item label="文件路径名称"  name="pathName">
          <a-input style="width: 100%" v-model:value="form.pathName" placeholder="文件路径名称" />
        </a-form-item>
        <a-form-item label="操作系统类型"  name="osType">
          <a-input style="width: 100%" v-model:value="form.osType" placeholder="操作系统类型" />
        </a-form-item>
        <a-form-item label="资源数据"  name="resData">
          <a-textarea style="width: 100%" v-model:value="form.resData" placeholder="资源数据" />
        </a-form-item>
        <a-form-item label="资源路径"  name="resPath">
          <a-input style="width: 100%" v-model:value="form.resPath" placeholder="资源路径" />
        </a-form-item>
        <a-form-item label="记录名称值"  name="recnameVal">
          <a-input style="width: 100%" v-model:value="form.recnameVal" placeholder="记录名称值" />
        </a-form-item>
        <a-form-item label="邮件发件人"  name="mailFrom">
          <a-input style="width: 100%" v-model:value="form.mailFrom" placeholder="邮件发件人" />
        </a-form-item>
        <a-form-item label="邮件收件人"  name="mailTo">
          <a-input style="width: 100%" v-model:value="form.mailTo" placeholder="邮件收件人" />
        </a-form-item>
        <a-form-item label="详细信息"  name="detail">
          <a-textarea style="width: 100%" v-model:value="form.detail" placeholder="详细信息" />
        </a-form-item>
        <a-form-item label="功能标识"  name="func">
          <a-input style="width: 100%" v-model:value="form.func" placeholder="功能标识" />
        </a-form-item>
        <a-form-item label="知识库ID"  name="kbid">
          <a-input style="width: 100%" v-model:value="form.kbid" placeholder="知识库ID" />
        </a-form-item>
        <a-form-item label="级别标识"  name="level">
          <a-input style="width: 100%" v-model:value="form.level" placeholder="级别标识" />
        </a-form-item>
        <a-form-item label="创建用户"  name="createUser">
          <a-input style="width: 100%" v-model:value="form.createUser" placeholder="创建用户" />
        </a-form-item>
        <a-form-item label="更新用户"  name="updateUser">
          <a-input style="width: 100%" v-model:value="form.updateUser" placeholder="更新用户" />
        </a-form-item>
    </a-form>

    <template #footer>
      <a-space>
        <a-button @click="onClose">取消</a-button>
        <a-button type="primary" @click="onSubmit">保存</a-button>
      </a-space>
    </template>
  </a-modal>
</template>
<script setup>
  import { reactive, ref, nextTick } from 'vue';
  import _ from 'lodash';
  import { message } from 'ant-design-vue';
  import { SmartLoading } from '/@/components/framework/smart-loading';
  import { eventBaseApi } from '/@/api/business/event-base/event-base-api';
  import { smartSentry } from '/@/lib/smart-sentry';

  // ------------------------ 事件 ------------------------

  const emits = defineEmits(['reloadList']);

  // ------------------------ 显示与隐藏 ------------------------
  // 是否显示
  const visibleFlag = ref(false);

  function show(rowData) {
    Object.assign(form, formDefault);
    if (rowData && !_.isEmpty(rowData)) {
      Object.assign(form, rowData);
    }
    // 使用字典时把下面这注释修改成自己的字典字段 有多个字典字段就复制多份同理修改 不然打开表单时不显示字典初始值
    // if (form.status && form.status.length > 0) {
    //   form.status = form.status.map((e) => e.valueCode);
    // }
    visibleFlag.value = true;
    nextTick(() => {
      formRef.value.clearValidate();
    });
  }

  function onClose() {
    Object.assign(form, formDefault);
    visibleFlag.value = false;
  }

  // ------------------------ 表单 ------------------------

  // 组件ref
  const formRef = ref();

  const formDefault = {
      eventType: undefined, //事件类型，如：firewall_alert、ids_alert、edr_alert等
      eventName: undefined, //事件名称，描述事件的具体内容
      eventRule: undefined, //触发事件的规则名称或ID
      eventTime: undefined, //事件发生时间，格式：yyyy-MM-ddTHH:mm:ss.SSSZ
      severity: undefined, //事件危险等级：1-低危，2-中危，3-高危，4-严重，5-紧急
      name: undefined, //事件名称标识，用于分类管理
      deviceName: undefined, //设备名称标识
      deviceIp: undefined, //设备IP地址标识
      attackPackets: undefined, //攻击数据包数量
      dstassetname: undefined, //目标资产名称标识
      srcassetname: undefined, //源资产名称标识
      securityDomains: undefined, //安全域标识
      srcIp: undefined, //源IP地址，支持IPv4和IPv6
      srcType: undefined, //源端点类型：0-内网，1-外网，2-DMZ等
      srcPort: undefined, //源端口号
      srcHostname: undefined, //源主机名
      srcMac: undefined, //源MAC地址，格式：XX:XX:XX:XX:XX:XX
      dstIp: undefined, //目标IP地址，支持IPv4和IPv6
      dstType: undefined, //目标端点类型：0-内网，1-外网，2-DMZ等
      dstPort: undefined, //目标端口号
      dstHostname: undefined, //目标主机名
      userName: undefined, //用户名，触发事件的用户账户
      reqMethod: undefined, //HTTP请求方法：GET、POST、PUT、DELETE等
      reqUrl: undefined, //请求URL地址
      reqReferer: undefined, //请求来源页面
      reqBody: undefined, //请求体内容
      reqStatus: undefined, //HTTP响应状态码
      reqUserAgent: undefined, //用户代理字符串
      reqHost: undefined, //请求主机名
      logType: undefined, //日志类型：web、network、system等
      reqHeader: undefined, //请求头信息，JSON格式
      reqxff: undefined, //X-Forwarded-For头信息
      reqCookie: undefined, //请求Cookie信息
      reqXwafuuid: undefined, //WAF唯一标识符
      rspLocation: undefined, //响应重定向地址
      rspCode: undefined, //响应状态码字符串
      rspBody: undefined, //响应体内容
      threatCategory: undefined, //威胁分类：malware、sql_injection、xss等
      threatSignature: undefined, //威胁特征签名
      threatIndicators: undefined, //威胁指标信息，JSON格式
      geoCountry: undefined, //地理位置国家代码，如：CN、US等
      srcgeolat: undefined, //源地理位置纬度
      srcgeolon: undefined, //源地理位置经度
      srcgeocity: undefined, //源地理位置城市
      dstgeocountry: undefined, //目标地理位置国家代码
      dstgeolat: undefined, //目标地理位置纬度
      dstgeolon: undefined, //目标地理位置经度
      dstgeocity: undefined, //目标地理位置城市
      protocol: undefined, //网络协议：HTTP、HTTPS、TCP、UDP等
      rawLog: undefined, //原始日志数据，完整的原始事件信息
      blocked: undefined, //是否被阻止：0-否，1-是
      action: undefined, //采取的行动：none、block、alert、log等
      deviceos: undefined, //设备操作系统：Windows、Linux、macOS等
      lianjie: undefined, //连接类型：direct、proxy、vpn等
      rspStartTime: undefined, //响应开始时间
      rspEndTime: undefined, //响应结束时间
      queryString: undefined, //查询参数字符串
      payload: undefined, //攻击载荷内容
      rspHeader: undefined, //响应头信息，JSON格式
      reqStartTime: undefined, //请求开始时间
      reqEndTime: undefined, //请求结束时间
      whiteRuleEffect: undefined, //白名单规则效果
      recname: undefined, //记录名称
      taskname: undefined, //任务名称
      md5: undefined, //文件MD5哈希值
      procname: undefined, //进程名称
      cmdline: undefined, //命令行参数
      pCmdline: undefined, //父进程命令行参数
      pathName: undefined, //文件路径名称
      osType: undefined, //操作系统类型
      resData: undefined, //资源数据
      resPath: undefined, //资源路径
      recnameVal: undefined, //记录名称值
      mailFrom: undefined, //邮件发件人
      mailTo: undefined, //邮件收件人
      detail: undefined, //详细信息
      func: undefined, //功能标识
      kbid: undefined, //知识库ID
      level: undefined, //级别标识
      createUser: undefined, //创建用户
      updateUser: undefined, //更新用户
  };

  let form = reactive({ ...formDefault });

  const rules = {
      eventType: [{ required: true, message: '事件类型，如：firewall_alert、ids_alert、edr_alert等 必填' }],
      eventName: [{ required: true, message: '事件名称，描述事件的具体内容 必填' }],
      eventRule: [{ required: true, message: '触发事件的规则名称或ID 必填' }],
      eventTime: [{ required: true, message: '事件发生时间，格式：yyyy-MM-ddTHH:mm:ss.SSSZ 必填' }],
      severity: [{ required: true, message: '事件危险等级：1-低危，2-中危，3-高危，4-严重，5-紧急 必填' }],
      name: [{ required: true, message: '事件名称标识，用于分类管理 必填' }],
      deviceName: [{ required: true, message: '设备名称标识 必填' }],
      deviceIp: [{ required: true, message: '设备IP地址标识 必填' }],
      attackPackets: [{ required: true, message: '攻击数据包数量 必填' }],
      dstassetname: [{ required: true, message: '目标资产名称标识 必填' }],
      srcassetname: [{ required: true, message: '源资产名称标识 必填' }],
      securityDomains: [{ required: true, message: '安全域标识 必填' }],
      srcIp: [{ required: true, message: '源IP地址，支持IPv4和IPv6 必填' }],
      srcType: [{ required: true, message: '源端点类型：0-内网，1-外网，2-DMZ等 必填' }],
      srcPort: [{ required: true, message: '源端口号 必填' }],
      srcHostname: [{ required: true, message: '源主机名 必填' }],
      srcMac: [{ required: true, message: '源MAC地址，格式：XX:XX:XX:XX:XX:XX 必填' }],
      dstIp: [{ required: true, message: '目标IP地址，支持IPv4和IPv6 必填' }],
      dstType: [{ required: true, message: '目标端点类型：0-内网，1-外网，2-DMZ等 必填' }],
      dstPort: [{ required: true, message: '目标端口号 必填' }],
      dstHostname: [{ required: true, message: '目标主机名 必填' }],
      userName: [{ required: true, message: '用户名，触发事件的用户账户 必填' }],
      reqMethod: [{ required: true, message: 'HTTP请求方法：GET、POST、PUT、DELETE等 必填' }],
      reqUrl: [{ required: true, message: '请求URL地址 必填' }],
      reqReferer: [{ required: true, message: '请求来源页面 必填' }],
      reqBody: [{ required: true, message: '请求体内容 必填' }],
      reqStatus: [{ required: true, message: 'HTTP响应状态码 必填' }],
      reqUserAgent: [{ required: true, message: '用户代理字符串 必填' }],
      reqHost: [{ required: true, message: '请求主机名 必填' }],
      logType: [{ required: true, message: '日志类型：web、network、system等 必填' }],
      reqHeader: [{ required: true, message: '请求头信息，JSON格式 必填' }],
      reqxff: [{ required: true, message: 'X-Forwarded-For头信息 必填' }],
      reqCookie: [{ required: true, message: '请求Cookie信息 必填' }],
      reqXwafuuid: [{ required: true, message: 'WAF唯一标识符 必填' }],
      rspLocation: [{ required: true, message: '响应重定向地址 必填' }],
      rspCode: [{ required: true, message: '响应状态码字符串 必填' }],
      rspBody: [{ required: true, message: '响应体内容 必填' }],
      threatCategory: [{ required: true, message: '威胁分类：malware、sql_injection、xss等 必填' }],
      threatSignature: [{ required: true, message: '威胁特征签名 必填' }],
      threatIndicators: [{ required: true, message: '威胁指标信息，JSON格式 必填' }],
      geoCountry: [{ required: true, message: '地理位置国家代码，如：CN、US等 必填' }],
      srcgeolat: [{ required: true, message: '源地理位置纬度 必填' }],
      srcgeolon: [{ required: true, message: '源地理位置经度 必填' }],
      srcgeocity: [{ required: true, message: '源地理位置城市 必填' }],
      dstgeocountry: [{ required: true, message: '目标地理位置国家代码 必填' }],
      dstgeolat: [{ required: true, message: '目标地理位置纬度 必填' }],
      dstgeolon: [{ required: true, message: '目标地理位置经度 必填' }],
      dstgeocity: [{ required: true, message: '目标地理位置城市 必填' }],
      protocol: [{ required: true, message: '网络协议：HTTP、HTTPS、TCP、UDP等 必填' }],
      rawLog: [{ required: true, message: '原始日志数据，完整的原始事件信息 必填' }],
      blocked: [{ required: true, message: '是否被阻止：0-否，1-是 必填' }],
      action: [{ required: true, message: '采取的行动：none、block、alert、log等 必填' }],
      deviceos: [{ required: true, message: '设备操作系统：Windows、Linux、macOS等 必填' }],
      lianjie: [{ required: true, message: '连接类型：direct、proxy、vpn等 必填' }],
      rspStartTime: [{ required: true, message: '响应开始时间 必填' }],
      rspEndTime: [{ required: true, message: '响应结束时间 必填' }],
      queryString: [{ required: true, message: '查询参数字符串 必填' }],
      payload: [{ required: true, message: '攻击载荷内容 必填' }],
      rspHeader: [{ required: true, message: '响应头信息，JSON格式 必填' }],
      reqStartTime: [{ required: true, message: '请求开始时间 必填' }],
      reqEndTime: [{ required: true, message: '请求结束时间 必填' }],
      whiteRuleEffect: [{ required: true, message: '白名单规则效果 必填' }],
      recname: [{ required: true, message: '记录名称 必填' }],
      taskname: [{ required: true, message: '任务名称 必填' }],
      md5: [{ required: true, message: '文件MD5哈希值 必填' }],
      procname: [{ required: true, message: '进程名称 必填' }],
      cmdline: [{ required: true, message: '命令行参数 必填' }],
      pCmdline: [{ required: true, message: '父进程命令行参数 必填' }],
      pathName: [{ required: true, message: '文件路径名称 必填' }],
      osType: [{ required: true, message: '操作系统类型 必填' }],
      resData: [{ required: true, message: '资源数据 必填' }],
      resPath: [{ required: true, message: '资源路径 必填' }],
      recnameVal: [{ required: true, message: '记录名称值 必填' }],
      mailFrom: [{ required: true, message: '邮件发件人 必填' }],
      mailTo: [{ required: true, message: '邮件收件人 必填' }],
      detail: [{ required: true, message: '详细信息 必填' }],
      func: [{ required: true, message: '功能标识 必填' }],
      kbid: [{ required: true, message: '知识库ID 必填' }],
      level: [{ required: true, message: '级别标识 必填' }],
      createUser: [{ required: true, message: '创建用户 必填' }],
      updateUser: [{ required: true, message: '更新用户 必填' }],
  };

  // 点击确定，验证表单
  async function onSubmit() {
    try {
      await formRef.value.validateFields();
      save();
    } catch (err) {
      message.error('参数验证错误，请仔细填写表单数据!');
    }
  }

  // 新建、编辑API
  async function save() {
    SmartLoading.show();
    try {
      if (form.id) {
        await eventBaseApi.update(form);
      } else {
        await eventBaseApi.add(form);
      }
      message.success('操作成功');
      emits('reloadList');
      onClose();
    } catch (err) {
      smartSentry.captureError(err);
    } finally {
      SmartLoading.hide();
    }
  }

  defineExpose({
    show,
  });
</script>
